# jQuery
JavaScript 框架,简化 JS 开发,本质上就是一些 JS 文件,封装了 JS 的原生代码
不带 min 的和带 min 的版本区别在于格式、缩进、大小、注释。一个用于开发环境,一个用于生产环境
区别:
- jQuery 的加载比 js 快,jQuery 在 dom 树结构绘制完毕就会加载;而 js 在整个页面加载完毕才加载
- jQuery 没有覆盖问题,并且按顺序执行;而 js 存在覆盖问题
# 基本语法
语法:
$(CSS选择器)或jQuery(CSS选择器),jQuery 对象内部以**==数组==存储匹配的数据**,若只有一个,索引号为 0对象转换(jQuery 对象和 JS 对象无法互相操作属性和方法)
- JS-->jQuery:
$(JS对象) - jQuery-->JS:
$(选择器)[0]或$(选择器).get(0)
- JS-->jQuery:
绑定事件(去掉 JS 事件中 on 即可,并给事件方法传入 function 对象)
$("#id1").click(function() { //。。。 });入口函数(DOM 树加载完毕执行):区别在于 onload 只能定义一次,否则覆盖;而 ready 可以定义多次
//$(document).ready(function(){ //精简如下 $(function() {});
# 选择器
在字符串中
基本选择器
- #id
- .class
- element
- * :选择所有元素
组合选择器
组合 选择 A,B 选择所有 A 元素和 B 元素 A B ==后代选择器==(B是 A 的所有后代结点,如子节点或者孙节点),可能多个 A > B ==子选择器==(B是 A 的直接子节点),可能多个 A + B ==相邻兄弟选择器==(AB 有相同的父结点,B是 A 的紧跟着的兄弟节点),只能一个 A ~ B ==一般兄弟选择器==(AB 有相同的父节点,B是 A之后的所有兄弟节点),可能多个 属性选择器(值要加引号)
属性 选择 ==[attr]== 带有以 attr 命名的属性的元素 ==[attr='value']== 带有以 attr 命名的,且**值为"value"**的属性的元素。 ==[attr!='value']== 带有以 attr 命名的,且值不为"value"的属性的元素或没有这个属性的元素 [attr~=value] 带有以 attr 命名的属性的元素,并且该属性是一个以空格作为分隔的值列表,其中至少一个值为"value" [attr|=value] 带有以 attr 命名的属性的元素,属性值为“value”或是以“value-”为前缀("-"为连字符,Unicode 编码为 U+002D)开头。用来匹配语言简写代码(如 zh-CN,zh-TW 可以用 zh 作为 value) ==[attr^=value]== 表示带有以 attr 命名的,且值是以"value"开头的属性的元素 ==[attr$=value]== 表示带有以 attr 命名的,且值是以"value"结尾的属性的元素 ==[attr=value*]== 表示带有以 attr 命名的,且值包含有"value"的属性的元素 ==[attr1='value1'][attr2='value2']...== 复合属性选择器,需要同时满足多个条件时使用。 基本过滤选择器
:first:首元素选择器,获得选择的元素中的第一个元素:last:尾元素选择器,获得选择的元素中的最后一个元素:not(selector):非元素选择器,不包括指定内容的元素。如:1234:not(3)--->124:even:偶数选择器,从 0 开始计数。操作索引号,页面显示奇数项:odd:奇数选择器,从 0 开始计数:eq(index):等于索引选择器,等于指定索引元素:gt(index):大于索引选择器,大于指定索引元素:lt(index):小于索引选择器,小于指定索引元素:header:标题选择器,获得标题(h1~h6)元素,固定写法:animated:获得动画的:focus:获得焦点:first-child:第一个子元素:last-child:最后一个子元素- ……
表单属性过滤选择器
:enabled:可用元素选择器,获得可用元素:disabled:不可用元素选择器,获得不可用元素:checked:选中选择器(radio、checkbox):selected:选中选择器(select):input:匹配所有 input, textarea, select 和 button 元素
内容过滤选择器
- :contains:匹配包含指定文本的元素
# DOM 操作
- 内容操作
html():获取/设置元素的标签体内容<a><font>内容</font></a>--><font>内容</font>text():获取/设置元素的标签体纯文本内容<a><font>内容</font></a>-->内容,设置时将 font 也删去了val():获取/设置元素的value 属性值,常用于**input标签,select**标签值也可以使用
- 属性操作
- 通用属性操作(获取传递 1 个字符串;设置传递 2 个字符串;删除传递 1 个字符串)
attr(): 获取/设置元素的属性removeAttr():删除属性prop():获取/设置元素的属性removeProp():删除属性- ==attr 和 prop区别?==
- 如果操作的是元素的固有属性,则建议使用 prop。如 checked,selected、disabled、href、src 等之类
- 如果操作的是元素自定义属性,则建议使用 attr。若上述属性在未设置属性值时使用 attr,返回 undefined
- ==attr 和 prop区别?==
- 对 class 属性操作
addClass():添加 class 属性值removeClass():删除 class 属性值toggleClass():切换class 属性,综合上面 2 个方法,类似开关- toggleClass("one"):判断如果元素对象上存在 class="one",则将属性值 one 删除掉。否则添加
css():传递 1 个字符串为获取值;2 个为设置值
- 通用属性操作(获取传递 1 个字符串;设置传递 2 个字符串;删除传递 1 个字符串)
- CRUD 操作(除过 empty,其他方法 JS 原生都有实现,empty 可以利用
innerHTML=""实现)- 内部插入(父子),对已存在的元素为剪贴
append(content):在 A 元素结尾追加 Bprepend(content):在 A 元素开头追加 BappendTo(content):在 B 元素结尾追加 AprependTo(content):在 B 元素开头追加 A
- 外部插入(兄弟),对已存在的元素为剪贴
before(content):在 A 元素之前插入 Bafter(content):在 A 元素之后插入 BinsertBefore(content):在 B 元素之前插入 AinsertAfter(content):在 B 元素之后插入 A
- 删除
empty():清空匹配元素中所有的子节点(所有 Node),但是保留当前对象以及其属性节点remove([expr]):expr 筛选元素。删除所有匹配的元素,事件数据也会删除,不提供值为删除自己detach([expr]):expr 筛选元素。删除所有匹配的元素,事件数据会保留
- 替换
replaceWith(html):把匹配的元素替换为指定元素,用 B 替换 AreplaceAll(html):相反,用 A 替换 Bclone([flag]):复制,克隆匹配的 DOM 元素并且选中这些克隆的副本。QQ 表情案例- flag 为 true 副本具有与真身一样的事件处理能力,默认不用填写代表为 false
- 内部插入(父子),对已存在的元素为剪贴
# 遍历
.each(callback):jQuery 对象使用(选择器获取后使用),遍历后的值可能为 JS 对象,注意方法调用区别$(arr).each(function(key, value) {});- key 为索引;value/this 是每一个元素对象(JS 对象);
- 回调函数返回值为 false 相当于 break;返回值为 true 相当于 continue
$.each(object,[callback]):遍历任意对象(JS 数组等也可以)。$.each(arr, function(key, value) {});for...of:jQuery3.0 后提供的方式,同 ES6 中使用方法一致
# 事件
页面加载:
ready(fn):有时标签绑定一个事件但是函数不执行,原因就是 DOM 没有加载完毕。可以放在/body 之前,或 onload 里
//$(document).ready(function(){ //精简如下 $(function() {});
事件绑定:
jquery 标准的绑定方式:
jq对象.事件方法(回调函数);注:如果调用事件方法,不传递回调函数,则会触发浏览器默认行为,如触发事件。
表单对象.submit();:让表单提交
on 绑定事件/off 解除绑定
jq对象.on("事件名称",回调函数)jq对象.off("事件名称")- 如果 off 方法不传递任何参数,则将组件上的所有事件全部解绑
toggle 事件切换
jq对象.toggle(fn1,fn2...):当单击 jq 对象对应的组件后,会执行 fn1.第二次点击会执行 fn2.....注意:1.9 版本 .toggle() 方法删除,jQuery Migrate(迁移)插件可以恢复此功能。
<script src="../js/jquery-migrate-1.0.0.js" type="text/javascript" charset="utf-8" ></script>
鼠标事件
- mouseover
- mouseout
- hover(overfn, outfn)
- toggle
- 同 js 方法
# 动画
- 显示/隐藏
- show([speed,[easing],[fn]])
- speed:动画的速度。三个预定义的值("slow","normal", "fast")或表示动画时长的毫秒数值(如:1000)
- easing:用来指定切换效果,默认是"swing",可用参数"linear"
* swing:动画执行时效果是 先慢,中间快,最后又慢
- linear:动画执行时速度是匀速的
- easing:用来指定切换效果,默认是"swing",可用参数"linear"
* swing:动画执行时效果是 先慢,中间快,最后又慢
- fn:在动画完成时执行的函数,每个元素执行一次。
- speed:动画的速度。三个预定义的值("slow","normal", "fast")或表示动画时长的毫秒数值(如:1000)
- hide([speed,[easing],[fn]])
- toggle([speed,[easing],[fn]])
- show([speed,[easing],[fn]])
- 滑动显示/隐藏
- slideDown([speed,[easing],[fn]])
- slideUp([speed,[easing],[fn]])
- slideToggle([speed,[easing],[fn]])
- 淡入淡出
- fadeIn([speed,[easing],[fn]])
- fadeOut([speed,[easing],[fn]])
- fadeToggle([speed,[easing],[fn]])
- fadeTo([[s],o,[e],[fn]]):调整元素不透明度
# 插件
增强 JQuery 的功能
实现方式
$.fn.extend(object):增强通过 jQuery 获取的对象的功能,如获取$("#id")对象,并增强其功能//1.定义jqeury的对象插件 $.fn.extend({ //定义了一个check()方法。所有的jq对象都可以调用该方法 check: function() { //让复选框选中 this.prop("checked", true); //this:调用该方法的jq对象 }, uncheck: function() { //让复选框不选中 this.prop("checked", false); }, }); $(function() { $("#btn-check").click(function() { //获取复选框对象 $("input[type='checkbox']").check(); }); $("#btn-uncheck").click(function() { //获取复选框对象 $("input[type='checkbox']").uncheck(); }); });$.extend(object):增强 jQuery 对象自身的功能,$或 jQuery$.extend({ max: function(a, b) { //返回两数中的较大值 return a >= b ? a : b; }, min: function(a, b) { //返回两数中的较小值 return a <= b ? a : b; }, }); //调用全局方法 var max = $.max(4, 3); //4 var min = $.min(1, 2); //1
# jQuery 重写案例
# 定时弹出广告(show()/hide())
$(function() {
showTime = setTimeout("showAd()", 1000);
});
var showAd = function() {
$("#adImg").show(500);
clearTimeout(showTime);
hiddenTime = setTimeout("hiddenAd()", 5000);
};
var hiddenAd = function() {
$("#adImg").hide(1000);
clearTimeout(hiddenTime);
};
# 隔行换色(.css)
$(function() {
$("tbody>tr:even").css("background-color", "yello"); //偶数行设置
$("tbody>tr:odd").css("background-color", "red"); //奇数行设置
});
# 全选全不选(attr/prop)
$(function() {
//全选/不选使用prop属性
$("#ckAll").click(function() {
$("tbody input").prop("checked", this.checked);
});
//反选只会转为DOM对象后再操作
$("#reCk").click(function() {
$("tbody input").each(function() {
this.checked = !this.checked;
});
});
});
# 省市联动
$(function () {
var arr = new Array();
arr[0] = ['西安', '商洛', '延安', '安康'];
arr[1] = ['石家庄', '廊坊', '秦皇岛', '雄安'];
arr[2] = ['深圳', '珠海', '广州', '不知道'];
$("#sheng").change(function () {
$("#shi option").remove();
// $("#shi").empty();
var value = parseInt(this.value);
$.each(arr,function (k,v) {
if(k===value){
$(v).each(function (k,v) {
var text = document.createTextNode(v);
var option = document.createElement("option");
option.appendChild(text);
$("#shi").append(option);
// $(option).appendTo($("#shi"));
});
}
});
});
});
# 左右列表(双击和 selected 有关)
$(function() {
//按键
$("#toRight").click(function() {
// $("#right").append($("#left option:selected"));
$("#left option:selected").appendTo($("#right"));
});
$("#toLeft").click(function() {
// $("#left").append($("#right option:selected"));
$("#right option:selected").appendTo($("#left"));
});
$("#allToRight").click(function() {
$("#left option").appendTo($("#right"));
});
$("#allToLeft").click(function() {
$("#right option").appendTo($("#left"));
});
//双击
$("#left").dblclick(function() {
$("#left option:selected").appendTo($("#right"));
});
$("#right").dblclick(function() {
$("#right option:selected").appendTo($("#left"));
});
});
# 使用 validate 完成表单校验
- 依赖 jQuery 库,所以先导入 jQuery 再导入 validate,最后导入国际化信息库(提示为中文)
$(function() {
$("#form1").validate({
rules: {
username: {
required: true,
minlength: 6,
},
password: {
required: true,
maxlength: 16,
digits: true,
},
rePassword: {
required: true,
equalTo: "[name='password']",
},
email: {
email: true,
},
},
messages: {
username: {
required: "用户名不能为空",
minlength: "用户名不能少于6位",
},
password: {
required: "密码不能为空",
maxlength: "密码不能多于16位",
digits: "密码只能是数字",
},
rePassword: {
required: "确认密码不能为空",
equalTo: "两次输入的密码不一致",
},
email: {
email: "邮箱格式不正确",
},
},
errorElement: "label", //用来创建错误提示信息标签,validate插件默认的就是label
success: function(label) {
//验证成功后的执行的回调函数
//label指向上面那个错误提示信息标签label
label
.text(" ") //清空错误提示消息
.addClass("success"); //加上自定义的success类
},
});
});
<!--单选,多选标签得在其后面加label标签,否则提示信息位置不正确-->
<label for="sex" class="error" style="display: none;"></label>
← BOM